Skip to content

Commit 5d1dea3

Browse files
KT-lczlichangze
andauthored
Fixcve (#197)
* refactor: 移除废弃的接口 Task: https://pms.uniontech.com/task-view-379371.html * fix: 修复任意地址文件可读写漏洞 Task: https://pms.uniontech.com/task-view-379373.html --------- Co-authored-by: lichangze <lichangze@uniontech.com>
1 parent 7673e0f commit 5d1dea3

34 files changed

Lines changed: 397 additions & 1759 deletions

usr/lib/deepin-daemon/service-trigger/LicenseInfo.service.json renamed to lib/deepin-daemon/service-trigger/LicenseInfo.service.json

File renamed without changes.

lib/systemd/system/lastore-daemon.service

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,6 @@ ExecStart=/usr/libexec/lastore-daemon/lastore-daemon
99
StandardOutput=null
1010
StandardError=null
1111
StateDirectory=lastore
12-
CacheDirectory=lastore
12+
CacheDirectory=lastore
13+
RuntimeDirectory=lastore
14+
RuntimeDirectoryMode=0750

makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ clean:
101101
rm -rf pkg
102102
rm -rf vendor/pkg
103103
rm -rf vendor/bin
104+
rm -rf gopath
104105

105106
check_code_quality:
106107
${GoPath} go vet ./src/...

src/internal/system/apt/proxy.go

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ func parsePkgSystemError(out, err []byte) error {
168168
}
169169
}
170170

171-
func CheckPkgSystemError(lock bool) error {
171+
func CheckPkgSystemError(lock bool, indicator system.Indicator) error {
172172
args := []string{"check"}
173173
if !lock {
174174
// without locking, it can only check for dependencies broken
@@ -180,20 +180,18 @@ func CheckPkgSystemError(lock bool) error {
180180
cmd.Stdout = &outBuf
181181
var errBuf bytes.Buffer
182182
cmd.Stderr = &errBuf
183-
ff, err := system.OpenFlush(system.FlushName)
184-
if err == nil {
185-
defer func() {
186-
ff.WriteString(fmt.Sprintf("=== CheckPkg %v end ===\n", cmd.Args))
187-
ff.Close()
188-
}()
183+
defer func() {
184+
indicator(system.JobProgressInfo{
185+
OnlyLog: true,
186+
OriginalLog: fmt.Sprintf("=== CheckPkg %v end ===\n", cmd.Args),
187+
})
188+
}()
189189

190-
err = ff.SetFlushCmd(cmd)
191-
if err != nil {
192-
logger.Warning(err)
193-
}
194-
}
195-
ff.WriteString(fmt.Sprintf("=== CheckPkg cmd running: %v ===\n", cmd.Args))
196-
err = cmd.Run()
190+
indicator(system.JobProgressInfo{
191+
OnlyLog: true,
192+
OriginalLog: fmt.Sprintf("=== CheckPkg cmd running: %v ===\n", cmd.Args),
193+
})
194+
err := cmd.Run()
197195
if err == nil {
198196
return nil
199197
}
@@ -251,7 +249,7 @@ func OptionToArgs(options map[string]string) []string {
251249
}
252250

253251
func (p *APTSystem) DownloadPackages(jobId string, packages []string, environ map[string]string, args map[string]string) error {
254-
err := CheckPkgSystemError(false)
252+
err := CheckPkgSystemError(false, p.Indicator)
255253
if err != nil {
256254
return err
257255
}
@@ -276,7 +274,7 @@ func (p *APTSystem) DownloadSource(jobId string, packages []string, environ map[
276274

277275
func (p *APTSystem) Remove(jobId string, packages []string, environ map[string]string) error {
278276
WaitDpkgLockRelease()
279-
err := CheckPkgSystemError(true)
277+
err := CheckPkgSystemError(true, p.Indicator)
280278
if err != nil {
281279
return err
282280
}
@@ -289,7 +287,7 @@ func (p *APTSystem) Remove(jobId string, packages []string, environ map[string]s
289287

290288
func (p *APTSystem) Install(jobId string, packages []string, environ map[string]string, args map[string]string) error {
291289
WaitDpkgLockRelease()
292-
err := CheckPkgSystemError(true)
290+
err := CheckPkgSystemError(true, p.Indicator)
293291
if err != nil {
294292
return err
295293
}
@@ -301,7 +299,7 @@ func (p *APTSystem) Install(jobId string, packages []string, environ map[string]
301299

302300
func (p *APTSystem) DistUpgrade(jobId string, packages []string, environ map[string]string, args map[string]string) error {
303301
WaitDpkgLockRelease()
304-
err := CheckPkgSystemError(true)
302+
err := CheckPkgSystemError(true, p.Indicator)
305303
if err != nil {
306304
// 无需处理依赖错误,在获取可更新包时,使用dist-upgrade -d命令获取,就会报错了
307305
var e *system.JobError

src/internal/system/command.go

Lines changed: 20 additions & 160 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,11 @@ import (
99
"bytes"
1010
"errors"
1111
"fmt"
12-
"io"
1312
"os"
1413
"os/exec"
1514
"strings"
1615
"sync"
1716
"syscall"
18-
"time"
19-
)
20-
21-
const (
22-
FlushName = "/tmp/lastore_update_detail.log"
2317
)
2418

2519
type CommandSet interface {
@@ -47,8 +41,6 @@ type Command struct {
4741
Stdout bytes.Buffer
4842
Stderr bytes.Buffer
4943
AtExitFn func() bool
50-
51-
ff *fileFlush
5244
}
5345

5446
func (c *Command) String() string {
@@ -86,11 +78,6 @@ func (c *Command) SetEnv(envVarMap map[string]string) {
8678

8779
func (c *Command) Start() error {
8880
var err error
89-
c.ff, err = OpenFlush(FlushName)
90-
if err != nil {
91-
return err
92-
}
93-
9481
rr, ww, err := os.Pipe()
9582
if err != nil {
9683
return fmt.Errorf("aptCommand.Start pipe : %v", err)
@@ -102,16 +89,10 @@ func (c *Command) Start() error {
10289

10390
// Print command start information
10491
cmdStr := strings.Join(c.Cmd.Args, " ")
105-
startMsg := fmt.Sprintf("=== Job %s running: %s ===\n", c.JobId, cmdStr)
106-
if c.ff != nil {
107-
c.ff.SetFlushCmd(c.Cmd)
108-
_, err := c.ff.WriteString(startMsg)
109-
if err != nil {
110-
logger.Warning("failed to write start message to log file:", err)
111-
} else {
112-
c.ff.Sync()
113-
}
114-
}
92+
c.Indicator(JobProgressInfo{
93+
OnlyLog: true,
94+
OriginalLog: fmt.Sprintf("=== Job %s running: %s ===\n", c.JobId, cmdStr),
95+
})
11596

11697
c.Cmd.ExtraFiles = append(c.Cmd.ExtraFiles, ww)
11798

@@ -173,26 +154,10 @@ func (c *Command) atExit() {
173154
statusStr = "UNKNOWN"
174155
}
175156

176-
cmdStr := strings.Join(c.Cmd.Args, " ")
177-
endMsg := fmt.Sprintf("=== Job %s end: %s [Status: %s] ===\n", c.JobId, cmdStr, statusStr)
178-
logger.Info(endMsg)
179-
if c.ff != nil {
180-
_, err := c.ff.WriteString(endMsg)
181-
if err != nil {
182-
logger.Warning("failed to write end message to log file:", err)
183-
} else {
184-
c.ff.Sync()
185-
}
186-
}
187-
188-
// Close log file when process exits
189-
if c.ff != nil {
190-
err := c.ff.Close()
191-
if err != nil {
192-
logger.Warning("failed to close log file:", err)
193-
}
194-
}
195-
157+
c.Indicator(JobProgressInfo{
158+
OnlyLog: true,
159+
OriginalLog: fmt.Sprintf("=== Job %s end: %s [Status: %s] ===\n", c.JobId, strings.Join(c.Cmd.Args, " "), statusStr),
160+
})
196161
logger.Infof("job %s Stdout: %s", c.JobId, c.Stdout.Bytes())
197162
logger.Infof("job %s Stderr: %s", c.JobId, c.Stderr.Bytes())
198163

@@ -214,6 +179,10 @@ func (c *Command) atExit() {
214179
Cancelable: false,
215180
})
216181
case ExitFailure:
182+
c.Indicator(JobProgressInfo{
183+
OnlyLog: true,
184+
OriginalLog: c.Stderr.String(),
185+
})
217186
err := c.ParseJobError(c.Stderr.String(), c.Stdout.String())
218187
if err != nil {
219188
c.Indicator(JobProgressInfo{
@@ -248,23 +217,8 @@ func (c *Command) IndicateFailed(errType JobErrorType, errDetail string, isFatal
248217
logger.Warningf("IndicateFailed: type: %s, detail: %s", errType, errDetail)
249218

250219
// Print command end information with failed status and close log file
251-
cmdStr := strings.Join(c.Cmd.Args, " ")
252-
endMsg := fmt.Sprintf("=== Job %s end: %s [Status: FAILED - %s] ===\n", c.JobId, cmdStr, errType)
220+
endMsg := fmt.Sprintf("=== Job %s end: %s [Status: FAILED - %s] ===\n", c.JobId, strings.Join(c.Cmd.Args, " "), errType.String())
253221
logger.Info(endMsg)
254-
if c.ff != nil {
255-
_, err := c.ff.WriteString(endMsg)
256-
if err != nil {
257-
logger.Warning("failed to write end message to log file:", err)
258-
} else {
259-
c.ff.Sync()
260-
}
261-
// Close log file when indicating failed
262-
err = c.ff.Close()
263-
if err != nil {
264-
logger.Warning("failed to close log file:", err)
265-
}
266-
}
267-
268222
progressInfo := JobProgressInfo{
269223
JobId: c.JobId,
270224
Progress: -1.0,
@@ -274,7 +228,8 @@ func (c *Command) IndicateFailed(errType JobErrorType, errDetail string, isFatal
274228
ErrType: errType,
275229
ErrDetail: errDetail,
276230
},
277-
FatalError: isFatalErr,
231+
FatalError: isFatalErr,
232+
OriginalLog: endMsg,
278233
}
279234
c.CmdSet.RemoveCMD(c.JobId)
280235
c.Indicator(progressInfo)
@@ -323,109 +278,14 @@ func (c *Command) updateProgress() {
323278
info, err := c.ParseProgressInfo(c.JobId, line)
324279
if err != nil {
325280
logger.Errorf("aptCommand.updateProgress %v -> %v\n", info, err)
281+
c.Indicator(JobProgressInfo{
282+
OnlyLog: true,
283+
OriginalLog: line,
284+
})
326285
continue
327286
}
328-
287+
info.OriginalLog = line
329288
c.Cancelable = info.Cancelable
330289
c.Indicator(info)
331290
}
332291
}
333-
334-
type fileFlush struct {
335-
fileName string
336-
file *os.File
337-
fileMu sync.Mutex
338-
}
339-
340-
func OpenFlush(file string) (*fileFlush, error) {
341-
if file == "" {
342-
return nil, fmt.Errorf("file name is empty")
343-
}
344-
345-
ff := &fileFlush{fileName: file}
346-
ff.fileMu.Lock()
347-
defer ff.fileMu.Unlock()
348-
349-
var err error
350-
ff.file, err = os.OpenFile(ff.fileName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
351-
if err != nil {
352-
return nil, err
353-
}
354-
355-
return ff, nil
356-
}
357-
358-
func (ff *fileFlush) Close() error {
359-
ff.fileMu.Lock()
360-
defer ff.fileMu.Unlock()
361-
if ff.file != nil {
362-
return ff.file.Close()
363-
}
364-
return nil
365-
}
366-
367-
func (ff *fileFlush) SetFlushCmd(cmd *exec.Cmd) error {
368-
ff.fileMu.Lock()
369-
defer ff.fileMu.Unlock()
370-
if ff.file == nil {
371-
return fmt.Errorf("file is not open")
372-
}
373-
374-
// Handle case where cmd.Stdout/Stderr might be nil
375-
if cmd.Stdout != nil {
376-
cmd.Stdout = io.MultiWriter(cmd.Stdout, ff)
377-
} else {
378-
cmd.Stdout = ff
379-
}
380-
381-
if cmd.Stderr != nil {
382-
cmd.Stderr = io.MultiWriter(cmd.Stderr, ff)
383-
} else {
384-
cmd.Stderr = ff
385-
}
386-
387-
return nil
388-
}
389-
390-
func (ff *fileFlush) Write(data []byte) (int, error) {
391-
ff.fileMu.Lock()
392-
defer ff.fileMu.Unlock()
393-
if ff.file == nil {
394-
return 0, fmt.Errorf("file is not open")
395-
}
396-
397-
// Add timestamp to each line
398-
timestamp := time.Now().Format("2006-01-02 15:04:05")
399-
lines := strings.Split(string(data), "\n")
400-
var timestampedLines []string
401-
402-
for _, line := range lines {
403-
if line != "" {
404-
timestampedLines = append(timestampedLines, fmt.Sprintf("[%s] %s", timestamp, line))
405-
} else {
406-
timestampedLines = append(timestampedLines, "")
407-
}
408-
}
409-
410-
timestampedData := []byte(strings.Join(timestampedLines, "\n"))
411-
_, err := ff.file.Write(timestampedData)
412-
if err != nil {
413-
return 0, err
414-
}
415-
416-
// 重要:必须返回原始数据的长度,不是时间戳数据的长度
417-
return len(data), nil
418-
}
419-
420-
func (ff *fileFlush) WriteString(data string) (int, error) {
421-
return ff.Write([]byte(data))
422-
}
423-
424-
func (ff *fileFlush) Sync() error {
425-
ff.fileMu.Lock()
426-
defer ff.fileMu.Unlock()
427-
if ff.file == nil {
428-
return fmt.Errorf("file is not open")
429-
}
430-
return ff.file.Sync()
431-
}

src/internal/system/common.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,6 @@ const (
118118
ErrorDamagePackage JobErrorType = "damagePackage" // 包损坏,需要删除后重新下载或者安装
119119
ErrorInvalidSourcesList JobErrorType = "invalidSourceList"
120120
ErrorPlatformUnreachable JobErrorType = "platformUnreachable"
121-
ErrorOfflineCheck JobErrorType = "offlineCheckError"
122121

123122
ErrorMissCoreFile JobErrorType = "missCoreFile"
124123
ErrorScript JobErrorType = "scriptError"

src/internal/system/dut/dut.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -167,15 +167,12 @@ func parseProgressInfo(id, line string) (system.JobProgressInfo, error) {
167167
}
168168
}
169169

170-
func CheckSystem(typ checkType, ifOffline bool, cmdArgs []string) *system.JobError {
170+
func CheckSystem(typ checkType, cmdArgs []string) *system.JobError {
171171
bin := "/usr/bin/deepin-system-update"
172172
var args []string
173173
args = append(args, "check")
174174
args = append(args, typ.String())
175-
if ifOffline {
176-
args = append(args, "--meta-cfg")
177-
args = append(args, system.DutOfflineMetaConfPath)
178-
} else {
175+
{
179176
args = append(args, "--meta-cfg")
180177
args = append(args, system.DutOnlineMetaConfPath)
181178
}

0 commit comments

Comments
 (0)